package com.dms.modules.user.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.dms.modules.user.dto.UserBehaviorDTO;
import com.dms.modules.user.entity.UserBehaviorStats;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
import java.util.Set;

public interface UserBehaviorService extends IService<UserBehaviorStats> {
    
    enum BehaviorType {
        BROWSE,
        SEARCH,
        FAVORITE
    }
    
    /**
     * 记录用户浏览行为
     * @param userId 用户ID
     * @param dto 行为数据
     * @return 是否记录成功
     */
    boolean recordUserBrowse(Long userId, UserBehaviorDTO dto);
    
    /**
     * 记录用户行为
     * @param userId 用户ID
     * @param type 行为类型
     * @param content 行为内容
     * @return 是否记录成功
     */
    boolean recordBehavior(Long userId, BehaviorType type, String content);
    
    /**
     * 记录用户搜索行为
     * @param userId 用户ID
     * @param keyword 搜索关键词
     */
    void recordUserSearch(Long userId, String keyword);
    
    /**
     * 获取用户行为统计
     * @param userId 用户ID
     * @return 行为统计数据
     */
    UserBehaviorStats getBehaviorStats(Long userId);
    
    /**
     * 获取用户行为历史
     * @param userId 用户ID
     * @param behaviorType 行为类型
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 行为历史列表
     */
    List<Map<String, Object>> getUserBehaviorHistory(Long userId, String behaviorType, 
                                                   LocalDateTime startTime, LocalDateTime endTime);
    
    /**
     * 获取用户分类偏好
     * @param userId 用户ID
     * @param limit 返回数量限制
     * @return 分类偏好列表
     */
    List<Map<String, Object>> getUserCategoryPreferences(Long userId, Integer limit);
    
    /**
     * 获取用户相关的商品ID集合
     * @param userId 用户ID
     * @return 商品ID集合
     */
    Set<Long> getUserProductIds(Long userId);
    
    /**
     * 清除用户行为历史
     * @param userId 用户ID
     * @param behaviorType 行为类型
     * @return 是否成功
     */
    boolean clearUserBehaviorHistory(Long userId, String behaviorType);
    
    /**
     * 获取用户行为趋势
     * @param userId 用户ID
     * @param type 行为类型
     * @param days 天数
     * @return 行为趋势数据
     */
    Map<String, Integer> getBehaviorTrend(Long userId, BehaviorType type, int days);
    
    /**
     * 获取用户行为热力图
     * @param userId 用户ID
     * @param type 行为类型
     * @return 行为热力图数据
     */
    Map<String, Map<String, Integer>> getBehaviorHeatmap(Long userId, BehaviorType type);
    
    /**
     * 分析用户行为模式
     * @param userId 用户ID
     * @return 行为模式数据
     */
    Map<String, Object> analyzeBehaviorPattern(Long userId);
    
    /**
     * 获取行为推荐
     * @param userId 用户ID
     * @return 推荐数据
     */
    List<Map<String, Object>> getBehaviorRecommendations(Long userId);
    
    /**
     * 获取用户收藏历史
     * @param userId 用户ID
     * @return 收藏历史列表
     */
    List<Map<String, Object>> getUserFavorites(Long userId);
    
    /**
     * 获取用户浏览历史
     * @param userId 用户ID
     * @return 浏览历史列表
     */
    List<Map<String, Object>> getUserBrowseHistory(Long userId);
    
    /**
     * 获取用户收藏的商品ID列表
     * @param userId 用户ID
     * @return 商品ID列表
     */
    List<Long> getFavoriteProductIds(Long userId);
    
    /**
     * 获取用户最近的搜索历史
     * @param userId 用户ID
     * @param limit 限制数量
     * @return 搜索历史列表
     */
    List<String> getUserRecentSearches(Long userId, int limit);
    
    /**
     * 清除用户搜索历史
     * @param userId 用户ID
     */
    void clearUserSearchHistory(Long userId);
} 